/**
 * this绑定规则
 * 默认绑定
 * 隐式绑定
 * 显示绑定
 * new绑定
 */

// 案例1
// function foo() {
//   console.log(this)
// }
// // 独立函数调用，默认绑定，指向window
// foo()


// 案例2
// function foo1() {
//   console.log(this)
// }

// function foo2() {
//   console.log(this)
//   foo1()
// }

// function foo3() {
//   console.log(this)
//   foo2()
// }

// foo3()


// 案例3
// var obj = {
//   name: "why",
//   foo: function() {
//     console.log(this)
//   }
// }
// var bar = obj.foo
// bar() // 独立函数调用，window
// obj.foo() // obj调用方式，指向obj


// 案例4
// function foo() {
//   console.log(this)
// }
// var obj = {
//   name: "why",
//   foo: foo
// }
// var bar = obj.foo
// bar() // 独立函数调用，window

// 案例5
// function foo() {
//   function bar() {
//     console.log(this)
//   }
//   return bar
// }
// var f = foo()
// f() //独立调用 window
// var obj = {
//   name: "yz",
//   sleeping: f
// }
// obj.sleeping() // 返回obj对象,隐式绑定